home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / iutil / cslocks.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-12  |  1.2 KB  |  73 lines

  1. # include    <ingres.h>
  2. # include    <access.h>
  3. # include    <lock.h>
  4. # include    <sccs.h>
  5.  
  6. SCCSID(@(#)cslocks.c    8.2    6/12/88)
  7.  
  8. struct lockreq    Lock;
  9. /*
  10.  *    setcsl- set a critical section lock
  11.  */
  12. setcsl(rtid)
  13. long    rtid;
  14. {
  15.     register char    *r;
  16.     register int    i;
  17.     auto    int    ret_val;        /* value returned from the lock driver */
  18.  
  19. #    ifdef xATR1
  20.     if ( tTf(28,0) )
  21.     {
  22.         printf(" setcsl ");
  23.         dumptid(&rtid);
  24.     }
  25. #    endif
  26.  
  27.     if (Alockdes < 0)
  28.         return (1);
  29.     Lock.lract = A_SLP;    /* sleep while waiting on lock */
  30.     Lock.lrtype = T_CS;    /* critical section lock */
  31.     Lock.lrmod = M_EXCL;    /* exclusive access */
  32.     bmove(&rtid, Lock.lrel, 4);    /* copy relid */ 
  33.     r = Lock.lpage;
  34.     for (i = 0; i < 4; i++)
  35.             /* zero out pageid */
  36.         *r++ = 0;
  37.     ret_val = dolock(&Lock);
  38.     return (ret_val);
  39. }
  40.  
  41.  
  42.  
  43. /*
  44.  *    unlcs- unlock a critical section
  45.  */
  46. unlcs(rtid)
  47. long    rtid;
  48. {
  49.     register char    *r;
  50.     register int    i;
  51.     auto    int    ret_val;
  52.  
  53. #    ifdef xATR1
  54.     if (tTf(28, 1))
  55.     {
  56.         printf(" unlcs ");
  57.         dumptid(rtid);
  58.     }
  59. #    endif
  60.  
  61.     if (Alockdes < 0)
  62.         return (1);
  63.     Lock.lract = A_RLS1;
  64.     Lock.lrtype = T_CS;
  65.     bmove(&rtid, Lock.lrel, 4);    /* copy relation identifier */
  66.     r = Lock.lpage;
  67.     for (i = 0; i < 4; i++)
  68.             /* zero out page id */
  69.         *r++ = 0;
  70.     ret_val = dolock(&Lock);
  71.     return (ret_val);
  72. }
  73.